# -*- coding: utf-8 -*-
from abc import abstractmethod


class Animal:
    def __init__(self, name, age, id, length, width, height):
        self._name = name
        self._age = age
        self._id = id
        self._length = length
        self._width = width
        self._height = height

    @property
    def name(self):
        return self._name

    @property
    def age(self):
        return self._age

    @property
    def id(self):
        return self._id

    @property
    def length(self):
        return self._length

    @property
    def width(self):
        return self._width

    @property
    def height(self):
        return self._height

    @name.setter
    def name(self, name):
        self._name=name

    @age.setter
    def age(self, age):
        self._age=age

    @id.setter
    def id(self, id):
        self._id=id

    @length.setter
    def length(self, length):
        self._length=length

    @width.setter
    def width(self, width):
        self._width=width

    @height.setter
    def height(self, height):
        self._height=height


    @abstractmethod
    def get_animal_type(self):
        return "Bird"

    @abstractmethod
    def call(self):
        pass


class Mammal(Animal):
    def __init__(self, name, age, id, length, width, height):
        super().__init__(name, age, id, length, width, height)

    def get_animal_type(self):
        return "Mammal"

    def call(self):
        print("hahaha")


class Bird(Animal):
    def __init__(self, name, age, id, length, width, height):
        super().__init__(name, age, id, length, width, height)

    def get_animal_type(self):
        return "Bird"

    def call(self):
        print("jiujiujiu")


class Reptile(Animal):
    def __init__(self, name, age, id, length, width, height):
        super().__init__(name, age, id, length, width, height)

    def get_animal_type(self):
        return "Reptile"

    def call(self):
        print("xixixi")


class Amphibian(Animal):
    def __init__(self, name, age, id, length, width, height):
        super().__init__(name, age, id, length, width, height)

    def get_animal_type(self):
        return "Amphibian"

    @abstractmethod
    def call(self):
        print("guaguagua")


class Fish(Animal):
    def __init__(self, name, age, id, length, width, height):
        super().__init__(name, age, id, length, width, height)

    def get_animal_type(self):
        return "Fish"

    def call(self):
        print("gulugulu")


def main():
    pass


if __name__ == "__main__":
    main()